/**
 * 取得堆栈信息
 * @param n int 忽略最近n个
 * 		若不传参数s, 0->调用$.stack()位置
 * @param s string|null 堆栈  null:取当前
 * 		"*(\n\s*at *)+\s*",  前*任意,忽略
 * @return string (\n    at *)+ 无堆栈:''
 */
$.stack = function(n=1, s=null){
	const x='\n    ', MAP=v=>'at '+v.trim();
	if(!s){ s=new Error('x').stack; n++; }
	s=s.trim();  if(s.slice(0,2)!=='at') n++;
	s = s.split(/\n\s*at /).slice(n).map(MAP);
	if(!s.length) return '';  s=s.join(x);
	return x + s.replace(/file:\/\//g,'');
};
